<HTML>
<HEAD>
<TITLE>Erg&auml;nzungen</TITLE>
</HEAD>
<BODY>
<H1>Erg&auml;nzungen</H1>
<P>
<H2>CAN Bootloader 0x1B</H2>
<P>
<H3>DLC = 5</H3>
<P>
<TABLE BORDER="0">
<TR><TD>4 Byte</TD><TD>LocIDstring</TD><TD></TD></TR>
<TR>
<TD>1 Byte</TD>
<TD>command = 0x11<TD>
<TD>wird von der MS2 an die GleisBox2 gesendet, sobald eine MS2 einen Reset-Befehl erh&auml;lt</TD>
</TR>
</TABLE>
<P>
Die MS2 wartet dann 400ms auf den Startup der 60113. Danach wird dann ca. alle
30sec ein 0x18 als "keepalive" gesendet.
<P>
<PRE>
# Initiate first Block to send ( sub cmd 0x44, following decrement block number 0x55 )
C:0x1B R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55
C:0x1B R:1 H:0x0000 D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55

# Binary data
#ZIP format of 050-ms2.bin
#Hash is block number
# Last Block of file send first! Byte padding is 0xFF until 1024 byte block
C:0x1B R:0 H:0x0300 D:8 D:0x05 0x8d 0x1e 0x03 0x4d 0x2a 0x06 0x41
C:0x1B R:0 H:0x0301 D:8 D:0x82 0x2d 0x01 0x06 0x52 0x2d 0x93 0x1e
C:0x1B R:0 H:0x0302 D:8 D:0x46 0x89 0x07 0xc0 0x04 0x00 0x47 0x42
## following data until block 0x37F ( 1024 Byte send)


# Send CRC and ACK from MS2( sub cmd 0x88, 16Bit CRC )
C:0x1B R:0 H:0xC32E D:7 D:0x4d 0x54 0x5e 0x22 0x88 0x95 0x0c
C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x5e 0x22 0x88
</PRE>
<P>
<H3>DLC = 6</H3>
<P>
?
<P>
<PRE>
#
##   Example of Operating software via "CAN Bootloader Service"
## H:0xC32E  = CS2 / Updater
#
#

# System reset
# System booted immediatly after receive this message!
# Target 0xFF is not documented but seemed to mean "All".
# Wait aspprox 400ms after sending this command
# for startupt MS2 software bevore send next commands
C:0x00 R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x80 0xff

# Invoke bootloader update sequence. Must be send after wait for
# start up
C:0x1B R:0 H:0xC32E D:0

# Send highest block number first
# MS2 respond with empty hash
C:0x1B R:0 H:0xC32E D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55
C:0x1B R:1 H:0x0000 D:6 D:0x4d 0x54 0x5e 0x22 0x44 0x55

# Send data stream upt to 1024 byte in 8 byte per kommand. If
# less than 8 byte to be transfer padd empty bytes with 0xFF
# Hash contains the dataset number and begins with 0x300
# Build blocks of 1024 bytes and send Last bytes of file FIRST
# Attention: MS2 needs blocks = 1024 Bytes, 60113 need only 512 byte!
C:0x1B R:0 H:0x0300 D:8 D:0x29 0x1d 0x28 0x05 0x6c 0xe4 0x75 0x66
C:0x1B R:0 H:0x0301 D:8 D:0x61 0x1d 0xac 0x03 0x11 0xfd 0x2d 0xa9
C:0x1B R:0 H:0x0302 D:8 D:0x08 0x1d 0x1f 0x06 0x1d 0xc2 0x04 0x61
C:0x1B R:0 H:0x0303 D:8 D:0x71 0xd9 0x41 0x62 0x20 0x4a 0x5d 0x3e
C:0x1B R:0 H:0x0304 D:8 D:0x04 0x3e 0x2d 0x9d 0x05 0x1d 0x9c 0x04
C:0x1B R:0 H:0x0305 D:8 D:0x1d 0xb6 0x08 0x1d 0x47 0x04 0x20 0x08
C:0x1B R:0 H:0x0306 D:8 D:0x00 0x41 0x6c 0x6c 0x67 0x65 0x6d 0x2a
C:0x1B R:0 H:0x0307 D:8 D:0x5f 0x72 0x20 0x29 0x08 0x7d 0x3d 0x0a
C:0x1B R:0 H:0x0308 D:8 D:0xb9 0xfd 0x10 0x04 0x75 0x6d 0x66 0x94
C:0x1B R:0 H:0x0309 D:8 D:0x1c 0x04 0x74 0x00 0x6a 0x7f 0x07 0x16
C:0x1B R:0 H:0x030A D:8 D:0x74 0x03 0x2d 0x4b 0x08 0x4c 0x04 0x28
C:0x1B R:0 H:0x030B D:8 D:0x73 0x29 0xed 0x05 0x4d 0x6d 0x0a 0x2d
C:0x1B R:0 H:0x030C D:8 D:0xbe 0x0a 0x28 0x08 0x20 0x50 0x6c 0x61
C:0x1B R:0 H:0x030D D:8 D:0x74 0x7a 0x20 0x74 0x3f 0x00 0x69 0x2f
C:0x1B R:0 H:0x030E D:8 D:0x05 0x8d 0x1e 0x03 0x4d 0x2a 0x06 0x41
C:0x1B R:0 H:0x030F D:8 D:0x82 0x2d 0x01 0x06 0x52 0x2d 0x93 0x1e
C:0x1B R:0 H:0x0310 D:8 D:0x46 0x89 0x07 0xc0 0x04 0x00 0x47 0x42
C:0x1B R:0 H:0x0311 D:8 D:0x10 0x1c 0x05 0x41 0x6b 0x74 0x75 0xea
C:0x1B R:0 H:0x0312 D:8 D:0x06 0x3e 0x73 0x9e 0x05 0x3d 0xee 0x04
C:0x1B R:0 H:0x0313 D:8 D:0x3d 0xc1 0x08 0x41 0x3d 0x1a 0x5a 0xb5
C:0x1B R:0 H:0x0314 D:8 D:0x1e 0x5a 0xa7 0x08 0xc9 0x67 0x3e 0x21
C:0x1B R:0 H:0x0315 D:8 D:0x40 0x09 0x6e 0x41 0x77 0x04 0x45 0x2b
C:0x1B R:0 H:0x0316 D:8 D:0x41 0xa1 0x7d 0x2b 0x08 0x01 0xff 0x01
C:0x1B R:0 H:0x0317 D:8 D:0x01 0xff 0x01 0x01 0x3b 0x01 0x00 0x00

# Updater send CRC command to be confirmed by MS2
# MS2 need approx 37ms for positive CRC calculation and response
# DLC=5 command as ACK or NAC
# NAC example: C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x0d 0x38 0xf2
#
C:0x1B R:0 H:0x3F17 D:7 D:0x4d 0x54 0x0d 0x38 0x88 0xb1 0x15
C:0x1B R:1 H:0x0000 D:5 D:0x4d 0x54 0x0d 0x38 0x88


loop until all block are send
... send block number--
... send data
... send CRC


# ?? undocumented, may mark loaded SW as complete and correct to load
# Software is loaded and starte without this command ( Seen at MS2 V 1.83 )
C:0x1B R:0 H:0xC32E D:5 D:0x4d 0x54 0x5e 0x22 0xf5

# Start loaded software ( reboot )
C:0x1B R:0 H:0xC32E D:5 D:0x4d 0x54 0x5e 0x22 0x11
</PRE>
<P>
<H2>Folgenummer der MS2</H2>
<P>
Die MS2 setzt als Folgenummer immer 0 bei der Abfrage der Loks der MS2. Damit
m&uuml;ssen auch Nachrichten mit einem Hash Wert von 0 akzeptiert werden, wenn
das Kommando "<VAR>Config Data Stream</VAR>" ist. Eine Abfrage, ob es sich um
eine CS2 Nachricht handelt, kann damit wie folgt aussehen:
<P>
<PRE>((Hash & MR_CS2_MASK_HASH_MAGIC) == MR_CS2_HASH_MAGIC) ||
(Hash == 0 && Command == MR_CS2_CMD_CFGDAT_STREAM);</PRE>
<P>
<H2>Sockets</H2>
<P>
Die CS2 &ouml;ffnet auch einen TCP Port f&uuml;r die Portnummer 15731 (die
gleiche Portnummer wie UDP). Das Protokoll f&uuml;r TCP ist identisch zu dem
UDP Protokoll.
<P>
Es k&ouml;nnen auch mehrere CAN Pakete in einem TCP Frame &uuml;bertragen
werden.
<P>
<H2>Z-Lib komprimierte Dateien</H2>
<P>
Erstes Frame 7 Byte<BR>
 32 Bit L&auml;nge der Nachricht (ohne Padding)<BR>
 16 Bit CRC f&uuml;r die Frame 2 - n (inclusive Padding)<BR>
  8 Bit -> immer 7b (keine Ahnung was die bedeuten)<BR>
Zweites Frame 8 Byte (wie alle anderen folgenden)<BR>
 32 Bit L&auml;ge der unkomprimierten Datei<BR>
 16 Bit Zlib Kennung 78 9c<BR>
 Rest die eigentliche Datei
<P>
Aufgef&uuml;llt wird das letze Frame mit Nullen.
<P>
Die CRC Berechnung scheint nach CRC-CCITT Standard gemacht zu werden.
<P>
<H2>MS2 Update</H2>
<P>
Ab Version CS2 3.5.5 und MS2 2.1 gibt es zwei MS2 files. Die Stelle der Version
in den Binaries ist wie folgt:
<P>
<TABLE BORDER="1">
<TR><TH>Datei</TH><TH>Position Version</TH></TR>
<TR><TD>016-gb2.bin</TD>Version an Byte 7 ( .vhigh) und 8 (.vlow)</TD></TR>
<TR><TD>flashdb2.ms2</TD><TD>Version an Byte 0 ( .version) und 2 (.monat). Das Jahr ist bisher immer gleich dem Monat (.monat=3 entspricht .jahr=2013). Zus&auuml;tzlich Klartext im Datenblock mit der Loknummer 99999.</TD></TR>
<TR><TD>lang.ms2</TD><TD>Version an Byte 0 ( .vhigh) und 1 (.vlow)</TD></TR>
<TR><TD>051-ms2.bin</TD><TD>Version an Byte 0 ( .vhigh) und 1 (.vlow)</TD></TR>
<TR><TD>050-ms2.bin</TD><TD>Version an Byte 253 ( .vhigh) und 254 (.vlow)</TD></TR>
</TABLE>
</BODY>
</HTML>
